package com.arron.algorithm.leetcodetop100.动态规划;

/**
 * 62. 不同路径
 */
public class 不同路径 {


    public int uniquePaths(int m, int n) {

        //定义dp，dp[i][j] 表示到达 矩阵grid[i][j]位置的走法有多少种
        int[][] dp = new int[m][n];


        //base case
        dp[0][0] = 1;
        for (int i = 1; i < n; i++) {
            dp[0][i] = 1;
        }
        for (int i = 1; i < m; i++) {
            dp[i][0] =1;
        }
        //状态转移方程 ，由于每次只能往下或者往右走，所以走到grid[i][j]位置的走法就等于 上边dp[i-1][j] 和左边dp[i][j-1]的走法之和

        for (int i = 1; i < m; i++) {
            for (int j = 1; j < n; j++) {

                dp[i][j] = dp[i][j-1] + dp[i-1][j];
            }
        }



        return dp[m-1][n-1];
    }


}
